import useContentRemoveFormStore from '@renderer/store/Form/ContentRemoveFormStore'

// 匹配所有的英文字母
const enRegex = /[A-Za-z]+/g
// 匹配所有的中文
const cnRegex = /[\u4E00-\u9FA5]+/g
// 匹配所有的数字
const numRegex = /[0-9]+/g
// 匹配所有的特殊字符
const specialRegex = /[!@#$%^*~`&()_+-=,'.<>\\|?！￥（），。“”：？\s+]+/g

export default function useContentRemoveTransfer(
  callback: () => ITableDataItem[]
) {
  const contentRemoveTransfer = () => {
    const {
      contentRemoveStyle,
      contentRemoveMethod,
      contentRemoveText,
      fileNamePosition,
      charAtPositionN,
      removeCharCount
    } = useContentRemoveFormStore()

    let positionFn: ((tableDataItem: ITableDataItem) => void) | undefined

    switch (contentRemoveStyle) {
      case '4':
        // 指定内容
        if (contentRemoveMethod === '0') {
          if (contentRemoveText) {
            // 删除指定内容
            positionFn = (tableDataItem) => {
              tableDataItem.newest.name = tableDataItem.newest.name.replaceAll(
                contentRemoveText,
                ''
              )
            }
          }
        } else {
          // 删除 1 个及以上字符
          if (removeCharCount > 0) {
            if (fileNamePosition === '0') {
              // 文件名前
              positionFn = (tableDataItem) => {
                const { name } = tableDataItem.newest
                const arr = name.split('')
                arr.splice(charAtPositionN, removeCharCount)
                tableDataItem.newest.name = arr.join('')
              }
            } else {
              // 文件名后
              positionFn = (tableDataItem) => {
                const { name } = tableDataItem.newest
                const arr = name.split('')

                let removeCharRealCount = removeCharCount
                // removeCharCount 最大值 = arr 的长度 - charAtPositionN
                if (removeCharRealCount > arr.length - charAtPositionN) {
                  removeCharRealCount = arr.length - charAtPositionN
                }
                arr.splice(
                  -(charAtPositionN + removeCharRealCount),
                  removeCharRealCount
                )
                tableDataItem.newest.name = arr.join('')
              }
            }
          }
        }
        break
      case '0':
        // 所有的英文字母
        positionFn = (tableDataItem) => {
          tableDataItem.newest.name = tableDataItem.newest.name.replaceAll(
            enRegex,
            ''
          )
        }
        break
      case '1':
        // 所有中文字母
        positionFn = (tableDataItem) => {
          tableDataItem.newest.name = tableDataItem.newest.name.replaceAll(
            cnRegex,
            ''
          )
        }
        break
      case '2':
        // 所有数字
        positionFn = (tableDataItem) => {
          tableDataItem.newest.name = tableDataItem.newest.name.replaceAll(
            numRegex,
            ''
          )
        }
        break
      case '3':
        // 所有特殊字符
        positionFn = (tableDataItem) => {
          tableDataItem.newest.name = tableDataItem.newest.name.replaceAll(
            specialRegex,
            ''
          )
        }
        break
    }

    // 如果成功创建了函数
    if (positionFn) {
      callback().forEach((item) => positionFn(item))
    }
  }

  return {
    contentRemoveTransfer
  }
}
